package com.lx.service;

import com.lx.entity.BankCard;
import com.lx.entity.Trade;
import com.lx.entity.vo.BankCardAndUserInfo;
import com.lx.entity.vo.TradeAndCardInfoVO;

import java.util.List;

/**
 * @title: BankCardService
 * @projectName bankManage
 * @description: TODO
 * @author: yuanChu
 * @date: 2022/5/6  8:32
 */
public interface BankCardService {
    boolean addBankCard(BankCard bankCard);

    /**
     * 根据银行卡号查询在数据库中的条数
     *
     * @param cardId 要查询的银行卡卡号
     * @return 查询到的数量
     */
    int findCardCountById(String cardId);

    /**
     * 根据银行卡卡号查询银行卡信息以及关联用户信息
     *
     * @param cardId 要查询的银行卡卡号
     * @return 银行卡对象与持卡人姓名的关联对象
     */
    BankCardAndUserInfo findCardInfoById(String cardId);

    /**
     * 根据用户Id查询名下的所有银行卡信息
     *
     * @param userId 要查询的用户Id
     * @return 银行卡列表
     */
    List<BankCard> findCardsByUserId(Integer userId);

    /**
     * 使用一张卡给另外一张卡进行转账
     *
     * @param trade 转账信息
     * @return 转账的结果
     */
    boolean transfer(Trade trade);

    /**
     * 根据卡号余额
     *
     * @param cardId
     * @return
     */
    List<BankCard> findBalanceById(String cardId);

    /**
     * 传入存款金额以及存入的银行卡对象进行存款操作
     *
     * @param depositNum 存款金额
     * @param bankCard   要存款的银行卡
     * @return 存款的结果
     * @author: 元初
     */
    boolean deposit(double depositNum, BankCard bankCard);

    /**
     * 传入存款金额以及存入的银行卡对象进行存款操作
     *
     * @param withdrawal 取款金额
     * @param card       要取款的银行卡
     * @return 存款的结果
     * @author: 元初
     */
    boolean withdrawal(double withdrawal, BankCard card);

    boolean freeze(String cardId);

    /**
     * 销卡
     *
     * @param cardId
     * @return
     */
    boolean updateStatusByCardId(String cardId);

    /**
     * 查询账户下所有的银行卡交易信息
     *
     * @param userId 用户ID
     * @return 该用户所有的银行卡交易信息
     */
    List<TradeAndCardInfoVO> getAccountLastMonthRecord(Integer userId);

    /**
     * 查询某张卡的交易信息
     * @param cardNo 卡号
     * @return 查询某张卡的交易信息
     */
    List<TradeAndCardInfoVO> selectLastMonthRecordByCard(String cardNo);
}
